/********************************************************************************
 * @file           : mainwindow.h
 * @author         : LI Yihong
 * @email          : liyh\@jihualab.ac.cn
 * @brief          : None
 * @attention      : None
 * @date           : 2024/8/15
 *******************************************************************************/


#ifndef INC_2048_MAINWINDOW_H
#define INC_2048_MAINWINDOW_H

#include "Data.h"
#include "Game.h"
#include "list"
#include <QDialog>
#include <QKeyEvent>
#include <QMessageBox>
#include <QWidget>
#include <QtWidgets/QTextBrowser>

QT_BEGIN_NAMESPACE
namespace Ui
{
    class mainWindow;
}
QT_END_NAMESPACE


class mainWindow : public QWidget
{
    Q_OBJECT

public:
    explicit mainWindow(QWidget *parent = nullptr);
    ~mainWindow() override;
    void keyPressEvent(QKeyEvent *) override;
    void clearScreen();
    void printScreen(const Data &);
    void printScore(int score);
    void printCongratulate(const int &maxNum);
    void printFail();
    void resetGame();
    void updateState(KeyDirection);
    void pinNewNumber(const int &row, const int &column);
    QTextBrowser *getQTextBrowserPtr(const int &row, const int &column);
    QLabel *getQLabelPtr(const int &row, const int &column);
    static QString setColor(const int &number);

private:
    void addNewData(const Data &);
    Data returnLastData();
    Ui::mainWindow *ui;
    Data *m_data;
    std::list<Data> m_dataList;
    int m_score;
    int m_congratulateIndex = 0;
public slots:
    void retryButtonClick();
    void undo();
    void exitGame();
};


#endif  // INC_2048_MAINWINDOW_H
